<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <!-- 点击按钮弹出警告：你别点我 -->
    <input type="button" value="点击" onclick="(function(){alert('你别点我');})()">
</body>
<script>
    //函数表达式：把函数当做一个值赋给变量。
    //注意：函数表达式必须先声明，再调用。
    let f1=function fun(){
        console.log('hello f1');
    };
    //函数调用：变量名()调用。
    f1();
    let f2=function fun2(name){
        console.log('hello'+name);
    }
    f2('张三');
    //匿名函数：函数没有名字
    let f3=function(a,b){
        return a<b?a:b;
    }
    console.log(f3(4,5));
    //立即执行函数：匿名函数自调用。用()括起来的部分是一个整体。
    (function(a,b){
        console.log(a+b);
    })(1,2);
    let a=function(){
        console.log(1);
    }
    console.log(typeof a);  //函数数据类型：属于object，和数组一样。
    //把函数这个值作为实参传给另一个函数
    //回调函数：把函数a当作参数传给函数b，在函数b中调用函数a，此时函数a叫做回调函数。
    console.log('--------------');
    let myf1=function(a){
        a();  //myf2();
    };
    let myf2=function(b){
        console.log('myf2');
    }
    myf1(myf2);
    //递归函数：在函数中调用自己。
    //阶乘：10！ =10*9*8*7*6......*1 > 10*(9!)
    let jc=function(n){
        if(n===1){
            return 1;
        }else{
            return n*jc(n-1);
        }
    }
    console.log(jc(10));
    console.log('-------------');
</script>
</html>